/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tbp.gui.table;

import br.com.tbp.model.domain.ItemDePedido;
import br.com.tbp.utils.DateUtils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Diego
 */
public class AtivacaoEntrantesTableModel extends AbstractTableModel {

    private List<ItemDePedido> itensList;
    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

    public AtivacaoEntrantesTableModel(List<ItemDePedido> itensList) {
        this.itensList = itensList;
    }

    public int getRowCount() {
        return itensList.size();
    }

    public int getColumnCount() {
        return 10;
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        switch (columnIndex) {
            case 0:
                return Long.class;
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                return String.class;
            case 6:
                return Integer.class;
            case 7:
                return Integer.class;
            case 8:
                return Date.class;
            case 9:
                return Integer.class;
        }
        return Object.class;
    }

    @Override
    public String getColumnName(int column) {
        switch (column) {
            case 0:
                return "ID pedido";
            case 1:
                return "Data";
            case 2:
                return "Empresa";
            case 3:
                return "Consultor";
            case 4:
                return "BOC";
            case 5:
                return "Produto";
            case 6:
                return "Qtde.";
            case 7:
                return "PortIn";
            case 8:
                return "Data ativação";
            case 9:
                return "Qtde. ativada";
        }
        return null;
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if (columnIndex == 8 || columnIndex == 9) {
            return true;
        }
        return false;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        if (aValue == null || aValue.toString().isEmpty()) {
            return;
        }
        ItemDePedido item = getItem(rowIndex);
        if (columnIndex == 8) {
            try {
                String dataStr = dateFormat.format(aValue);
                Date data = dateFormat.parse(dataStr);
                if (data == null) {
                    return;
                    //JOptionPane.showMessageDialog(null, "A data de ativação não foi informada corretamente.", "Mensagem do sistema", 0);
                } else {
                    item.setDataAtivacao(data);
                    fireTableCellUpdated(rowIndex, columnIndex);
                    fireTableDataChanged();
                }
            } catch (ParseException ex) {
                System.out.println(ex.getMessage());
            }

        } else if (columnIndex == 9) {
            try {
                int qtdeAtivada = Integer.parseInt(aValue.toString());
                item.setQtdeAtivada(qtdeAtivada);
                fireTableCellUpdated(rowIndex, columnIndex);
            } catch (NumberFormatException ex) {
                System.out.println(ex.getMessage());
                //JOptionPane.showMessageDialog(null, "A quantidade ativada não foi informada corretamente.", "Mensagem do sistema", 0);
            }
        }
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        ItemDePedido item = getItem(rowIndex);
        if (item != null) {
            switch (columnIndex) {
                case 0:
                    return item.getPedido().getId();
                case 1:
                    return DateUtils.dataObjetoParaString(item.getPedido().getData());
                case 2:
                    return item.getPedido().getEmpresa().getRazaoSocial();
                case 3:
                    return item.getPedido().getConsultor().getNome();
                case 4:
                    return item.getPedido().getBoc().getNome();
                case 5:
                    return item.getProduto().getNome();
                case 6:
                    return item.getQtde();
                case 7:
                    return item.getQtePortIn();
                case 8:
                    return item.getDataAtivacao();
                case 9:
                    return item.getQtdeAtivada();
            }
        }
        return null;
    }

    public ItemDePedido getItem(int row) {
        if (row >= 0) {
            return itensList.get(row);
        }
        return null;
    }
}
